package com.ltkj.coupon.service.impl;

import com.ltkj.common.core.domain.R;
import com.ltkj.common.core.exception.ServiceException;
import com.ltkj.common.core.utils.DateUtils;
import com.ltkj.common.core.utils.bean.BeanUtils;
import com.ltkj.common.security.utils.SecurityUtils;
import com.ltkj.coupon.domain.TCouponRule;
import com.ltkj.coupon.domain.TCouponTemp;
import com.ltkj.coupon.domain.TCouponUser;
import com.ltkj.coupon.domain.dto.TCouponTempAddDTO;
import com.ltkj.coupon.domain.dto.TCouponTempReefAddDTO;
import com.ltkj.coupon.domain.vo.CouponSelectVo;
import com.ltkj.coupon.mapper.TCouponMapper;
import com.ltkj.coupon.mapper.TCouponRuleMapper;
import com.ltkj.coupon.mapper.TCouponTempMapper;
import com.ltkj.coupon.mapper.TCouponUserMapper;
import com.ltkj.coupon.service.ITCouponTempService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

/**
 * 优惠券模板Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-09-21
 */
@Service
public class TCouponTempServiceImpl implements ITCouponTempService 
{
    private static final Logger log = LoggerFactory.getLogger(TCouponTempServiceImpl.class);
    @Autowired
    private TCouponTempMapper tCouponTempMapper;
    @Autowired
    private TCouponRuleMapper tCouponRuleMapper;
    @Autowired
    private TCouponUserMapper tCouponUserMapper;
    @Autowired
    private TCouponMapper tCouponMapper;

    /**
     * 查询优惠券模板
     * 
     * @param id 优惠券模板主键
     * @return 优惠券模板
     */
    @Override
    public TCouponTemp selectTCouponTempById(Long id)
    {
        return tCouponTempMapper.selectTCouponTempById(id);
    }

    @Override
    public TCouponTempAddDTO selectTCouponTempByIdV2(Long id) {
        TCouponTempAddDTO tCouponTempAddDTO = new TCouponTempAddDTO();
        TCouponTemp tCouponTemp = tCouponTempMapper.selectTCouponTempById(id);
        if(tCouponTemp!=null){
             tCouponTempAddDTO = BeanUtils.copy(tCouponTemp, TCouponTempAddDTO.class);
            //查询票务信息
            List<TCouponTempReefAddDTO> tCouponTempReefAddDTOS = tCouponMapper.queryTCouponTempReefBycouponTempId(tCouponTempAddDTO.getId());
            tCouponTempAddDTO.setTCouponTempReefAddDTOList(tCouponTempReefAddDTOS);
            if(tCouponTempReefAddDTOS!=null&&tCouponTempReefAddDTOS.size()>0){
                tCouponTempAddDTO.setRuleType(tCouponTempReefAddDTOS.get(0).getRuleType());
            }

        }else {
            throw new ServiceException("无此优惠券信息!");
        }

        return tCouponTempAddDTO;
    }

    /**
     * 查询优惠券模板列表
     * 
     * @param tCouponTemp 优惠券模板
     * @return 优惠券模板
     */
    @Override
    public List<TCouponTemp> selectTCouponTempList(TCouponTemp tCouponTemp)
    {
        return tCouponTempMapper.selectTCouponTempList(tCouponTemp);
    }

    /**
     * 新增优惠券模板
     * 
     * @param tCouponTemp 优惠券模板
     * @return 结果
     */
    @Override
    public int insertTCouponTemp(TCouponTemp tCouponTemp)
    {
        tCouponTemp.setCreateTime(DateUtils.getNowDate());
        return tCouponTempMapper.insertTCouponTemp(tCouponTemp);
    }

    @Override
    public int insertTCouponTempAdd(TCouponTempAddDTO tCouponTempAddDTO) {
        //新增优惠券
        List<TCouponTempReefAddDTO> tCouponTempReefAddDTOList = tCouponTempAddDTO.getTCouponTempReefAddDTOList();
        if(tCouponTempReefAddDTOList!=null&&tCouponTempReefAddDTOList.size()>0){
            TCouponTemp tCouponTemp = BeanUtils.copy(tCouponTempAddDTO, TCouponTemp.class);
            BigDecimal couponAmout = tCouponTemp.getCouponAmout();
            tCouponTemp.setCouponAmout(couponAmout.multiply(new BigDecimal("100")));
            tCouponTemp.setCreateTime(DateUtils.getNowDate());
            tCouponTemp.setQuantityResidue(tCouponTemp.getQuantity());
            tCouponTemp.setIsDel("0");
            tCouponTemp.setStatus("2");
            String username = SecurityUtils.getLoginUser().getUsername();
            tCouponTemp.setCreateBy(username);
            int i = tCouponTempMapper.insertTCouponTemp(tCouponTemp);
            //新增优惠券模板
            for (TCouponTempReefAddDTO vo : tCouponTempReefAddDTOList) {
                TCouponRule tCouponRule = new TCouponRule();
                tCouponRule.setRuleType(tCouponTempAddDTO.getRuleType());
                tCouponRule.setRefId(vo.getRefId());
                tCouponRule.setRefDesc(vo.getRefDesc());
                tCouponRule.setCouponTempId(tCouponTemp.getId());
                tCouponRule.setCreateTime(DateUtils.getNowDate());
                tCouponRule.setCreateBy(username);
                tCouponRule.setIsDel("0");
                tCouponRuleMapper.insertTCouponRule(tCouponRule);
            }
            return i;


        }else {
            throw new ServiceException("请选择门票信息!");
        }

    }

    /**
     * 修改优惠券模板
     * 
     * @param tCouponTemp 优惠券模板
     * @return 结果
     */
    @Override
    public int updateTCouponTemp(TCouponTemp tCouponTemp)
    {
        tCouponTemp.setUpdateTime(DateUtils.getNowDate());
        return tCouponTempMapper.updateTCouponTemp(tCouponTemp);
    }

    @Override
    public int updateTCouponTempV2(TCouponTempAddDTO tCouponTempAddDTO) {
        TCouponTemp tCouponTemp = tCouponTempMapper.selectTCouponTempById(tCouponTempAddDTO.getId());
        if(tCouponTemp==null){
            throw new ServiceException("此优惠券不存在!");
        }
        //判断优惠券是否存在
        TCouponUser tCouponUser= new TCouponUser();
        tCouponUser.setCouponTempId(tCouponTempAddDTO.getId());
        tCouponUser.setIsDel("0");
        List<TCouponUser> tCouponUsers = tCouponUserMapper.selectTCouponUserList(tCouponUser);
        if(tCouponUsers!=null&&tCouponUsers.size()>0){
            throw new ServiceException("此优惠券已发放不可修改");
        }
        TCouponTemp tCouponTempUp = BeanUtils.copy(tCouponTempAddDTO, TCouponTemp.class);
        String username = SecurityUtils.getLoginUser().getUsername();
        tCouponTempUp.setUpdateBy(username);
        tCouponTempUp.setUpdateTime(DateUtils.getNowDate());
        tCouponTempUp.setCouponAmout(tCouponTempUp.getCouponAmout().multiply(new BigDecimal("100")));
        int i1 = tCouponTempMapper.updateTCouponTemp(tCouponTempUp);
        //先删除优惠券规则表
        int i = tCouponMapper.delCouponRuleByRefId(tCouponTempUp.getId());
        List<TCouponTempReefAddDTO> tCouponTempReefAddDTOList = tCouponTempAddDTO.getTCouponTempReefAddDTOList();
        if(tCouponTempReefAddDTOList!=null&&tCouponTempReefAddDTOList.size()>0){
            for (TCouponTempReefAddDTO vo : tCouponTempReefAddDTOList) {
                TCouponRule tCouponRule = new TCouponRule();
                tCouponRule.setRuleType(tCouponTempAddDTO.getRuleType());
                tCouponRule.setRefId(vo.getRefId());
                tCouponRule.setRefDesc(vo.getRefDesc());
                tCouponRule.setCouponTempId(tCouponTemp.getId());
                tCouponRule.setCreateTime(DateUtils.getNowDate());
                tCouponRule.setCreateBy(username);
                tCouponRule.setIsDel("0");
                tCouponRuleMapper.insertTCouponRule(tCouponRule);
            }
        }else {
            throw new ServiceException("请选择门票信息!");
        }


        return i1;
    }

    /**
     * 批量删除优惠券模板
     * 
     * @param ids 需要删除的优惠券模板主键
     * @return 结果
     */
    @Override
    public int deleteTCouponTempByIds(Long[] ids)
    {
        return tCouponTempMapper.deleteTCouponTempByIds(ids);
    }

    @Override
    public int deleteTCouponTempByIdsV2(Long[] ids) {
        String username = SecurityUtils.getLoginUser().getUsername();
        int num=0;
        if(ids!=null&&ids.length>0){

         for(int i=0;i<ids.length;i++){
             TCouponTemp tCouponTemp = tCouponTempMapper.selectTCouponTempById(ids[i]);
             if(tCouponTemp==null){
                 throw new ServiceException("此优惠券不存在!");
             }
             TCouponUser tCouponUser= new TCouponUser();
             tCouponUser.setCouponTempId(ids[i]);
             tCouponUser.setIsDel("0");
             List<TCouponUser> tCouponUsers = tCouponUserMapper.selectTCouponUserList(tCouponUser);
             if(tCouponUsers!=null&&tCouponUsers.size()>0){
                 throw new ServiceException("此优惠券已发放不可修改");
             }

             tCouponTemp.setIsDel("1");

             tCouponTemp.setUpdateBy(username);
             tCouponTemp.setUpdateTime(DateUtils.getNowDate());
             tCouponTempMapper.updateTCouponTemp(tCouponTemp);
             num++;
             //修改优惠券规则表
             int i1 = tCouponMapper.updateCouponRuleIsDelBycouponTempId(ids[i], username, DateUtils.getNowDate());
         }

        }else {
            throw new ServiceException("请选择需要删除的优惠券!");
        }
        return num;
    }

    /**
     * 删除优惠券模板信息
     * 
     * @param id 优惠券模板主键
     * @return 结果
     */
    @Override
    public int deleteTCouponTempById(Long id)
    {
        return tCouponTempMapper.deleteTCouponTempById(id);
    }

    @Override
    public R<List<CouponSelectVo>> select() {
        List<CouponSelectVo> list = tCouponMapper.select();
        return R.ok(list);
    }
}
